Computer programs such as word processors, spreadsheets, databases, and Web browsers, among others, were originally developed as standalone systems. Third parties (i.e., people or organizations other than the original program developers) were not able to add functionality to programs created by others. However, programs are becoming more complex and developers do not have the resources to provide all of the functionality that users may want or need. Thus, some modern programs allow third parties to add functionality (in the form of another program called a plug-in module) to a host program. For example, in the word processing context, Microsoft Word® supports plug-in modules developed by third parties that allow users to view files that could not be displayed without the plug-in module.
In general, plug-in modules are software extensions that add functionality to a program. Typically, a plug-in module will be installed into a specific directory location that is searched when the host program begins execution. If the plug-in module is properly located, the host program will interact with the plug-in module to extend or enhance the program's abilities.
Plug-in modules may extend a host program's features in any number of different ways. More specifically, in the context of Web browsers, plug-in technology enables plug-in modules, such as ActiveX® controls, browser helper objects, and toolbar extensions, to execute within a Web browser and to act as part of the Web browser. A Web browser's functionality can thus be arbitrarily extended. For example, with the assistance of plug-in modules, a Web browser can access and execute files embedded in a Web page that are in formats the browser would not normally recognize, such as flash animation, video, and audio files. Unfortunately, plug-in modules, if designed incorrectly, may cause a program such as a Web browser to “crash” or fail. As known to those skilled in the art and others, failures are frustrating to users and may result in the loss of information. Typically, a failure occurs when a program performs an operation that is not permitted by an operating system.
A substantial portion, if not almost all, of the failures in programs that support plug-in technology are caused by plug-in modules. To the user, the cause of the failure is unknown. Some users mistakenly believe that the failure is caused by an error in the host program that supports the plug-in technology. As a result, some users continue to use plug-in modules created by third parties, resulting in continued instability. Obviously, the usability of a program is reduced when the user does not know the cause of a failure and is unable to prevent future failures. Existing programs do not identify to users the cause of a failure or assist users in preventing future failures. Instead, program providers receive reports from users who experience failures and from these reports identify the cause of the failure. If a plug-in module caused the failure, the program provider may either provide an update that disables the plug-in module or request an update from the third party that created the plug-in module.
As mentioned above, the current failure prevention paradigm is a reactionary system, i.e., a program is updated to prevent failures only after failures are reported. Furthermore, the computer program update cycle is an extremely costly process for the program provider and, ultimately, for consumers.
In light of the above-identified problems, it would be beneficial to computer users, both in terms of convenience and in terms of cost-effectiveness, to have a system that identifies plug-in modules and other programs that cause failures. The present invention is directed to providing such a system.